package com.thm.tfast.core.oss;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * @ClassName AbstractOssService
 * @Author THM
 * @Date 2022/10/27 15:50
 * @Version 1.0
 * @Description 对象存储
 */
public abstract class AbstractOssService {

    /**
     * 上传文件
     * @param bucketName 对象桶名称
     * @param fileName 文件名称
     * @param file 文件
     * @return 文件访问地址
     */
    public abstract String upload(String bucketName, String fileName, MultipartFile file);

    /**
     * 批量上传文件
     * @param bucketName 对象桶名称
     * @param files 文件名称和对应文件流
     * @return 文件访问地址集合
     */
    public abstract Map<String, String> uploadBatch(String bucketName, Map<String, MultipartFile> files);

    /**
     * 下载文件
     * @param bucketName 对象桶名称
     * @param fileName 文件名称
     * @return 文件流
     */
    public abstract InputStream download(String bucketName, String fileName);

    /**
     * 下载文件
     * @param bucketName 对象桶名称
     * @param fileName 文件名称
     * @param response 响应流
     * @return 文件流
     */
    public abstract void download(String bucketName, String fileName, HttpServletResponse response);
    /**
     * 下载文件
     * @param bucketName 对象桶名称
     * @param fileName 文件名称
     * @return 文件字节数组
     */
    public abstract byte[] downloadToByte(String bucketName, String fileName);


    /**
     * 删除文件
     * @param bucketName 对象桶名称
     * @param fileName 文件名称
     * @return true false
     */
    public abstract Boolean remove(String bucketName, String fileName);

    /**
     * 批量删除文件
     * @param bucketName 对象桶名称
     * @param fileNames 文件名称集合
     * @return true false
     */
    public abstract Boolean removeBatch(String bucketName, List<String> fileNames);

    /**
     * 获取文件访问路径
     * @param bucketName 对象桶名称
     * @param fileName 文件名称集合
     * @return 访问路径
     */
    public abstract String getUrl(String bucketName, String fileName);


}
